import requests,json
link = 'https://www.shanbay.com/api/v1/vocabtest/category/'
levelContent =  requests.get(link)


levelData = json.loads(levelContent.text)
if levelData['status_code'] != 0:
    print('抓取英语等级数据失败！')
    exit()
cateList = levelData['data']
num = 1
cateStr = '';
for cate in cateList:
    cateStr = cateStr + str(num) + ', '+cate[1] +' '
    if num % 5 == 0:
        cateStr = cateStr + '\n'
    num = num + 1
 
while  True:
    bianhao = input('请输入你选择的词库编号，按Enter确认\n'+cateStr+'>')
    if bianhao.isdigit() == False or (bianhao.isdigit() == True and int(bianhao) not in range(num+1)):
        print('输入词库编号有误!')
        continue
    break    

cateKey = cateList[int(bianhao)-1][0]

oneCateLink = 'https://www.shanbay.com/api/v1/vocabtest/vocabularies/?category='+cateKey

oneCateWordsContent = requests.get(oneCateLink)

jsonWords = json.loads(oneCateWordsContent.content)

if jsonWords['status_code'] != 0:
    print('抓取英语等级的测试单词数据失败！')
    exit()

jsonWordsData =   jsonWords['data']  
    
wordsKnows = []
#创建一个空的列表，用于记录用户认识的单词。
notKnows = []
#创建一个空的列表，用于记录用户不认识的单词。
print('测试现在开始。如果你认识这个单词，请输入Y，否则直接敲Enter：')

num = 1
danciList = []


for words in jsonWordsData:
    print ("第"+str(num)+'个：'+words['content'])
    #为什么要用str()转换格式？当然是因为字符串和数字不能用+连接啦。
    #查看XHR的结构，你会明白x['content']就是第x个单词。
    answer = input('认识请敲Y，否则敲Enter：')
    #让用户输入自己是否认识。
    if answer == 'Y':
        wordsKnows.append(words)
        danciList.append(words['content'])
    else:
        notKnows.append(words)  
    num = num + 1    
print ('\n在上述'+str(len(jsonWordsData))+'个单词当中，有'+str(len(danciList))+'个是你觉得自己认识的，它们是：')
print(danciList)


print ('现在我们来检测一下，你有没有真正掌握它们：')
wrongWords = []
#新建一个list，用来存储用户记错的单词。
rightNum = 0
#新建一个整数，用来统计用户记对多少个单词。
for danci in wordsKnows:
    
    print('\n A:'+danci['definition_choices'][0]['definition'])
    print('B:'+danci['definition_choices'][1]['definition'])
    print('C:'+danci['definition_choices'][2]['definition'])
    print('D:'+danci['definition_choices'][3]['definition'])
    xuanze = input('请选择单词\"'+danci['content']+'\"的正确翻译：')
    xuanZeList = {"A":danci['definition_choices'][0]['rank'],"B":danci['definition_choices'][1]['rank'],"C":danci['definition_choices'][2]['rank'],"D":danci['definition_choices'][3]['rank']} 
    while xuanze not in ['A','B','C',"D"]:
        print('输入的答案必须是A,B,C,D中的一个')
        print('\n A:'+danci['definition_choices'][0]['definition'])
        print('B:'+danci['definition_choices'][1]['definition'])
        print('C:'+danci['definition_choices'][2]['definition'])
        print('D:'+danci['definition_choices'][3]['definition'])
        xuanze = input('请选择单词\"'+danci['content']+'\"的正确翻译：')

    if xuanZeList[xuanze] == danci['rank']:
        rightNum = rightNum + 1
    else:
         wrongWords.append(danci)
print ('现在，到了公布成绩的时刻:')
print ('在'+str(len(jsonWordsData))+'个'+cateList[int(bianhao)-1][1]+'词汇当中，你认识其中'+str(len(wordsKnows))+'个，实际掌握'+str(rightNum)+'个，错误'+str(len(wrongWords))+'个。') 

save = input ('是否打印并保存你的错词集？填入Y或N： ')
#询问用户，是否要打印并保存错题集。
if save == 'Y':
#如果用户说是：
    f = open('错题集.txt', 'a+',encoding='utf-8')
    #在当前目录下，创建一个错题集.txt的文档。        
    print ('你记错的单词有：')
    f.write('你记错的单词有：\n')
    #写入"你记错的单词有：\n"
    m=0
    for z in wrongWords:
    #启动一个循环，循环的次数等于，用户的错词数：
        m=m+1
        print (z['content'])
        #打印每一个错词。
        f.write(str(m) +'. '+ z['content']+'\n')
        #写入序号，写入错词。           
    print ('你不认识的单词有：')
    f.write('你没记住的单词有：\n')
    #写入"你没记住的单词有：\n"
    s=0
    for x in notKnows:
    #启动一个循环，循环的次数等于，用户不认识的单词数。
        s += 1
        print (x['content'])
        #打印每一个不认识的单词。
        f.write(str(s) +'. '+ x['content']+'\n')
        #写入序号，写入用户不认识的词汇。 
    print ('错词和没记住的词已保存至当前文件目录下，下次见！')
    #告诉用户，文件已经保存好。
    #在网页版终端运行时，文件会被写在课程的服务器上，你看不到，但它的确已经存在。
else:
#如果用户不想保存：
    print('下次见！')
    #输出“下次见！”








